const fs = require('fs-extra');
const path = require('path');
const crypto = require('crypto');

// 用户数据存储路径
const usersFilePath = path.join(__dirname, 'data', 'users.json');

// 读取用户数据
async function readUsers() {
    try {
        const data = await fs.readFile(usersFilePath, 'utf8');
        return JSON.parse(data);
    } catch (error) {
        return [];
    }
}

// 写入用户数据
async function writeUsers(users) {
    await fs.writeFile(usersFilePath, JSON.stringify(users, null, 2));
}

// 哈希密码
function hashPassword(password) {
    return crypto.createHash('md5').update(crypto.createHash('md5').update(password).digest('hex')).digest('hex');
}

// 注册新用户
async function registerUser(username, password, email) {
    const users = await readUsers();

    // 检查用户名是否已存在
    if (users.some(user => user.username === username)) {
        console.error('用户名已存在');
        return;
    }

    // 检查邮箱是否已存在
    if (users.some(user => user.email === email)) {
        console.error('邮箱已存在');
        return;
    }

    // 生成哈希密码
    const hashedPassword = hashPassword(password);

    // 创建新用户对象
    const newUser = {
        username,
        password: hashedPassword,
        email,
        avatar: 'default-avatar.png',
        repositories: [],
        role: 'default'
    };

    // 添加新用户到用户列表
    users.push(newUser);
    await writeUsers(users);

    console.log('注册成功');
}

// 获取命令行参数
const args = process.argv.slice(2);

if (args.length !== 3) {
    console.error('使用方法: node register.js <用户名> <密码> <邮箱>');
    process.exit(1);
}

const [username, password, email] = args;

// 调用注册函数
registerUser(username, password, email);